こんちには、ふじまるです!
この前久々に仕事でSQLでテーブル更新しようとしたらちょっと困ったのでメモしておきます。
Selectした結果を使って別テーブルをアップデートするときは以下のようなSQLを書きます。
update
[更新先テーブル名]
set
[更新先テーブル名].[更新先テーブルの項目]= [更新元テーブル名].[更新元テーブルの項目]
from
[更新元テーブル名]
where
[更新先テーブル名].[更新先テーブルの項目] = [更新元テーブル名].[更新元テーブルの項目]
具体的な例で説明すると、以下のように書きます。
例:「商品マスター」テーブルの「価格」を「プライス」テーブルの「価格」へ更新する。
商品マスターテーブル
商品コード | 価格 |
A | 1000 |
B | 2000 |
C | 5000 |
プライステーブル(ここの価格を商品マスターと同じにしたい)
商品コード | 価格 |
A | 500 |
B | 1000 |
C | 4500 |
update
プライス
set
プライス.価格 = 商品マスター.価格
from
商品マスター
where
プライス.商品コード = 商品マスター.商品コード
以上のSQLを実行するとプライステーブルが以下のように商品マスターと同じ価格になります。
プライステーブル(更新後)
商品コード | 価格 |
A | 1000 |
B | 2000 |
C | 5000 |
という簡単な感じです。
この前困ったのは商品マスターだけ 「as A」でAというテーブル名にして実行したら、「項目があいまい」のエラーが出てしまって、それじゃあプライステーブルにも「as B」でBというテーブル名にしたけど同じエラーだったんです。
テーブル名先頭につけるの面倒なので短い別名をつけて指定したんですが、それではダメでした。(SQLserver)
最終的に正規のテーブル名をつける事で処理はできました。
--ダメな例①
update
プライス
set
価格= A.価格
from
商品マスター as A
where
商品コード = A.商品コード
--ダメな例②
update
プライス as B
set
B.価格= A.価格
from
商品マスター as A
where
B.商品コード = A.商品コード
はい、ということで仕事の備忘録でした。
それでは!